package br.com.sgh.entidade;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.hibernate.annotations.ForeignKey;

@Entity
public class Acervo implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer codAcervo;
    @Column(length = 50)
    private String autor;
    @Column(length = 50)
    private String editora;
    @Column(length = 4)
    private String ano;
    @Column(length = 255)
    private Integer paginas;
    private Integer diasemprestimo;
    @Column(length = 20)
    private String edicao;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @ForeignKey(name = "acervotitulo")
    @JoinColumn(name = "codTitulo", referencedColumnName = "codTitulo")
    private Titulo titulo;

    @OneToMany(mappedBy = "acervo", fetch = FetchType.LAZY)
    @ForeignKey(name = "emprestimoacervo")
    private List<Emprestimo> emprestimos;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @ForeignKey(name = "acervogenero")
    @JoinColumn(name = "codGenero", referencedColumnName = "codGenero")
    private Genero genero;

    public Acervo() {
        titulo = new Titulo();
        genero = new Genero();
    }

    public Integer getCodAcervo() {
        return codAcervo;
    }

    public void setCodAcervo(Integer codAcervo) {
        this.codAcervo = codAcervo;
    }

    public String getAutor() {
        return autor;
    }

    public void setAutor(String autor) {
        this.autor = autor;
    }

    public String getEditora() {
        return editora;
    }

    public void setEditora(String editora) {
        this.editora = editora;
    }

    public String getAno() {
        return ano;
    }

    public void setAno(String ano) {
        this.ano = ano;
    }

    public Integer getPaginas() {
        return paginas;
    }

    public void setPaginas(Integer paginas) {
        this.paginas = paginas;
    }

    public Integer getDiasemprestimo() {
        return diasemprestimo;
    }

    public void setDiasemprestimo(Integer diasemprestimo) {
        this.diasemprestimo = diasemprestimo;
    }

    public String getEdicao() {
        return edicao;
    }

    public void setEdicao(String edicao) {
        this.edicao = edicao;
    }

    public Titulo getTitulo() {
        return titulo;
    }

    public void setTitulo(Titulo titulo) {
        this.titulo = titulo;
    }

    public List<Emprestimo> getEmprestimos() {
        return emprestimos;
    }

    public void setEmprestimos(List<Emprestimo> emprestimos) {
        this.emprestimos = emprestimos;
    }

    public Genero getGenero() {
        return genero;
    }

    public void setGenero(Genero genero) {
        this.genero = genero;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 53 * hash + (this.codAcervo != null ? this.codAcervo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Acervo other = (Acervo) obj;
        if (this.codAcervo != other.codAcervo && (this.codAcervo == null || !this.codAcervo.equals(other.codAcervo))) {
            return false;
        }
        return true;
    }
    
}